package com.ftg.learn.controller;

import com.alibaba.cloud.nacos.balancer.NacosBalancer;
import com.alibaba.cloud.nacos.loadbalancer.NacosLoadBalancer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * 1:  nacos discovery [loadbalnace] [resttemplate]
 * 2: 我想优雅的调用restful service api
 * 2.1 openfeign
 * @author kangjx
 * @createTime 2022/12/28
 */
@RestController
public class ConsumerController {

    //甲方restcontroller api 地址 手工写死的
    //集群 列表
    //nacos 列表
    //负载均衡  是自己写呢  还是人家有呢
//
//    NamingService namingService;
//
//    {
//        try {
//            namingService = NamingFactory.createNamingService("127.0.0.1:8848");
//
//            List<Instance> list = namingService.getAllInstances("nacos-demo");
//            list.forEach(x -> {
//                System.out.println(x.getIp() + "地址" + ";端口" + x.getPort());
//            });
//        } catch (NacosException e) {
//            e.printStackTrace();
//        }
//    }
//
//    String[] urls = {"http://localhost:8081/hello", "http://localhost:8082/hello"};

//
//    learn-nacos 战小东 192.168.1.23 (甲方)
//
//            nacos-consumer 吕 192.168.2.23（乙方）
//
//            杨 - 吕 consumer - 战小东 192.168.4.3
//    http://192.168.2.23:9090/consumer/demo


    /**
     * rest 模板用来完成 服务间调用
     *
     * https://www.womengongsi.com/abc?name=abc
     *
     * rest请求
     *  knife4j 小刀(在线文档 )
     *   url :
     *   参数：
     *   返回类型:
     *
     *   是否可以再编写一个 java服务来调用它.
     *
     *   java程序可以让前台页面  h5 c3 js vue
     *   还可以让其它的 java 程序
     *
     */
    @Autowired
    RestTemplate restTemplate;

    /**
     * 负载均衡器  ： 用来分派 分发  分流请求数量
     */
    @Autowired
    LoadBalancerClient loadBalancerClient;



    @GetMapping("/consumer/demo")
    public String getInfo() {
        /**
         * x 表示甲方地址  restful api
         * y 方法返回值
         * z 传递参数
         */
        //随机访问  随机访问规则 负载均衡(手写的)
//        NacosLoadBalancer
        ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-demo");
        String url = String.format("http://%s:%s/hello",serviceInstance.getHost(),serviceInstance.getPort(),"");
        String jia = restTemplate.getForObject(url, String.class);
//        resttemplate (让你完成甲乙双方通信的技术 )
        //我希望的用户通过调用getinfo方法，完成对learnnacos方法的调用·「集群」
        return "这是我从甲方获得到的数据 " + jia;
    }

}
